import { defineConfig, loadEnv } from 'vite';
import { resolve } from 'path';
import vue from '@vitejs/plugin-vue';
import Icons from 'unplugin-icons/vite';
import IconsResolver from 'unplugin-icons/resolver';
import AutoImport from 'unplugin-auto-import/vite';
import Components from 'unplugin-vue-components/vite';
import { VantResolver } from '@vant/auto-import-resolver';
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
import postcssPxtoRem from 'postcss-pxtorem';
import legacy from '@vitejs/plugin-legacy';

export default ({ mode }) => {
  const { VITE_PORT, VITE_BASE_URL } = loadEnv(mode, process.cwd());

  return defineConfig({
    base: VITE_BASE_URL,
    plugins: [
      vue(),
      AutoImport({
        imports: ['vue', 'vue-router', 'pinia'],
        resolvers: [
          IconsResolver({
            prefix: 'Icon',
          }),
          VantResolver(),
          ElementPlusResolver(),
        ],
        eslintrc: {
          enabled: true,
        },
        dts: true,
      }),
      Components({
        resolvers: [
          IconsResolver({
            enabledCollections: ['lets-icons'],
          }),
          VantResolver(),
          ElementPlusResolver(),
        ],
      }),
      Icons({
        autoInstall: true,
      }),
      //兼容低版本浏览器(不包含ie11)
      // legacy({
      //   //defaults : edge>=80, firefox>=72, chrome>=80, safari>=13.1, chromeAndroid>=80, iOS>=13.1
      //   targets: ['defaults', 'not IE 11'],
      //   additionalLegacyPolyfills: ['regenerator-runtime/runtime'],
      //   renderLegacyChunks: true,
      //   polyfills: [
      //     'es.symbol',
      //     'es.promise',
      //     'es.promise.finally',
      //     'es/map',
      //     'es/set',
      //     'es.array.filter',
      //     'es.array.for-each',
      //     'es.array.flat-map',
      //     'es.object.define-properties',
      //     'es.object.define-property',
      //     'es.object.get-own-property-descriptor',
      //     'es.object.get-own-property-descriptors',
      //     'es.object.keys',
      //     'es.object.to-string',
      //     'web.dom-collections.for-each',
      //     'esnext.global-this',
      //     'esnext.string.match-all',
      //   ],
      // }),
    ],
    resolve: {
      alias: {
        '@': resolve(__dirname, 'src'),
        '@store': resolve(__dirname, 'src/store'),
      },
    },
    css: {
      preprocessorOptions: {
        sass: {},
      },
      postcss: {
        plugins: [
          postcssPxtoRem({
            rootValue: 37.5, // 按照自己的设计稿修改 375/10
            unitPrecision: 3, // 保留到5位小数
            selectorBlackList: ['ignore', 'tab-bar', 'tab-bar-item'], // 忽略转换正则匹配项
            propList: ['*'],
            replace: true,
            mediaQuery: false,
            minPixelValue: 0,
          }),
        ],
      },
    },
    optimizeDeps: {
      include: ['mitt', 'dayjs', 'axios', 'pinia', '@vueuse/core'],
      exclude: ['@iconify-icons/lets-icons'],
    },
    server: {
      // 端口号
      port: VITE_PORT,
      // 监听所有地址
      host: '0.0.0.0',
      // 服务启动时是否自动打开浏览器
      open: true,
      // 允许跨域
      cors: true,
      // 自定义代理规则
      proxy: {
        '/api': {
          // target: "https://luckycola.com.cn",
          target: 'https://test-wolf.bmac.com.cn/',
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/api/, ''),
        },
      },
      // 预热文件以提前转换和缓存结果，降低启动期间的初始页面加载时长并防止转换瀑布
      warmup: {
        clientFiles: ['./index.html', './src/{views,components}/*'],
      },
    },
    build: {
      // 设置最终构建的浏览器兼容目标
      target: 'es2015',
      // 构建后是否生成 source map 文件
      sourcemap: false,
      //  chunk 大小警告的限制（以 kbs 为单位）
      chunkSizeWarningLimit: 500,
      // 启用/禁用 gzip 压缩大小报告
      reportCompressedSize: false,
      // 自定义底层的 Rollup 打包配置
      rollupOptions: {
        output: {
          // 指定 chunks 的入口文件模式
          entryFileNames: 'static/js/[name]-[hash].js',
          // 对代码分割中产生的 chunk 自定义命名
          chunkFileNames: 'static/js/[name]-[hash].js',
          // 自定义构建结果中的静态资源名称
          assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
          // 压缩 Rollup 产生的额外代码
          compact: true,
          // 创建自定义的公共 chunk
          manualChunks(id) {
            //静态资源拆分打包
            if (id.includes('node_modules')) {
              return 'vendor';
            }
          },
          // manualChunks:{
          //   vue: ['vue', 'vue-router', 'pinia'],
          // },
        },
      },
    },
  });
};
